

package com.hazelcast.client.impl.connection;

import com.hazelcast.client.impl.protocol.ClientMessage;
import com.hazelcast.client.impl.spi.EventHandler;
import com.hazelcast.internal.networking.Channel;
import com.hazelcast.internal.nio.Connection;

import javax.annotation.Nullable;
import java.util.Map;
import java.util.UUID;

/**
 * The ClientConnection is connection that lives on the client side on behalf of a Java client.
 * <p>
 * On the server side there will be a {@link com.hazelcast.internal.server.ServerConnection}.
 * <p>
 * Use this class to add client specific method.
 */
public interface ClientConnection extends Connection {

    /**
     * Start the processing of a ClientMessage.
     *
     * @param message the message to process.
     */
    void handleClientMessage(ClientMessage message);

    EventHandler getEventHandler(long correlationId);

    void removeEventHandler(long correlationId);

    void addEventHandler(long correlationId, EventHandler handler);

    UUID getClusterUuid();

    void setClusterUuid(UUID uuid);

    // used in tests
    Map<Long, EventHandler> getEventHandlers();

    /**
     * Returns the TPC channels associated with this connection,
     * or {@code null}, if the client is not TPC-aware or the
     * TPC is disabled on the server-side.
     */
    @Nullable
    Channel[] getTpcChannels();
}
